﻿/// <reference path="Events.ts" />

import Events = require('Framework/Events');

export interface ErrorHappenedOptions
{
    Error: any;
}

export class MessagesRepo
{
    public MessagesLoaded = new Events.Event<string[]>();

    public ErrorHappened = new Events.Event<ErrorHappenedOptions>();
}

export var MessagesRepoInstance = new MessagesRepo();

/** Кстати, такие комментарии опознаются IntelliSense ;) */
export class SomeEventSubscriber
{
    /** Тут будем хранить все подписки нашего класса */
    private Subscriptions: Events.ISubscription[] = [];

    public Subscribe()
    {
        //Одним движение регистрируем подписку одного события
        this.Subscriptions.push(MessagesRepoInstance.MessagesLoaded.Subscribe(function (messages: string[], context?: any)
        {
            alert(messages && messages.length > 0 ? messages[0] : 'Nothing');
        }, this));

        //И совершенно другого
        this.Subscriptions.push(MessagesRepoInstance.ErrorHappened.Subscribe(function (error: ErrorHappenedOptions) 
        {
            alert(error.Error);
        }, this));
    }

    /** Просто проходит по массиву подписок и отписывает все события независимо от типа */
    public Destroy()
    {
        for (var i = 0; i < this.Subscriptions.length; i++)
        {
            this.Subscriptions[i].Unsubscribe();
        }

        this.Subscriptions = [];
    }
}

